﻿#include "Background.h"
#include"Resource.h"
#include"Game.h"
Background::Background()
{
    init();
}
Background::Background(int x, int y) :m_modelRect(x, y,0,0)
{
    init();
}

void Background::addFrame(const QString& name, const QString& alias)
{
    
   /* auto pix= Game::res().getPixmaps(name);
    if (pix == nullptr)
        OutInfo;*/
    m_model[alias].addFrame(getFrame(name));
    m_modelRect.setSize(m_model[alias].getFrame().size());
    //m_size = ;
}

void Background::modifiFrame(const QString& name, const QString& alias)
{
    addFrame(name,alias);
}

QVector<QPixmap>* Background::getFrame(const QString& name)
{
    auto pix = Game::res().getPixmaps(name);
    if (pix == nullptr)
        OutInfo;
    return pix;
}

void Background::init()
{
    addFrame("背景图片","正常");
    setType( Type::background);
}

void Background::update()
{
    int h = m_model["正常"].getFrame().height();
    setY(globalElapsedTimer.elapsed() / m_timer % h);
}

void Background::draw(QPainter* painter)
{
    if (m_model.find("正常") == m_model.end())
        return;
    m_model["正常"].draw(painter, m_modelRect.topLeft());
    int h=m_model["正常"].getFrame().height();
    m_model["正常"].draw(painter, m_modelRect.topLeft() - QPoint(0, h));
}

//void Background::setPos(int dx, int dy)
//{
//    
//}

void Background::move(const QPoint& Pos)
{
    m_modelRect.moveTo(Pos);
    //m_modelRect.setTopLeft(Pos);
}

void Background::move(const int x, const int y)
{
    move(QPoint(x, y));
}

void Background::setX(const int x)
{
    move(x, getPos().y());
}

void Background::setY(const int y)
{
    move(getPos().x(),y);
}

const QPoint Background::getPos()
{
    return m_modelRect.topLeft();
}

const QPoint Background::getCenterPos()
{
    return m_modelRect.center();
}

const QSize Background::getSize()
{
    return m_modelRect.size();
}

size_t Background::getCurrentTime()
{
    return globalElapsedTimer.elapsed();
}

void Background::setTimer(const int time)
{
    m_timer = time;
}

const int Background::getTimer()
{
    return m_timer;
}

bool Background::TimerTrigger()
{
    size_t size = (globalElapsedTimer.elapsed() / m_timer) /** m_Steplength*/;
    if (size != m_temp)
    {
        m_temp = size;
        return true;
    }
    return false;
}

QMap<QString, Animation>& Background::getModel()
{
    return m_model;
}

const QRect& Background::getModelRect()
{
    return m_modelRect;
}

void Background::setPause(bool flag)
{
    m_pause = flag;
    /*if (m_pause)
    {
        m_pause = false;
    }
    else
    {
        m_pause = true;
    }*/
}

void Background::setSize(QSize size)
{
    m_modelRect.setSize(size) ;
}

unsigned long long operator""_s(unsigned long long num)
{
        return 1000  * num;
}
